// 题目链接：https : // www.luogu.com.cn/problem/P1683

#include <iostream>

using namespace std;

const int W = 25;
const int H = 25;

int w, h;
int res = 0;   // 保存结果
char g[H][W];  // 记录桃花岛的瓷砖
bool st[H][W]; // 记录每块瓷砖是否已经被走过

// 存储走的方向，依次是左，下，右，上
int dx[] = {0, 1, 0, -1};
int dy[] = {-1, 0, 1, 0};

// (x,y)表示当前所在坐标
void DFS(int x, int y)
{
    // 遍历四个方向的瓷砖
    for (int i = 0; i < 4; ++i)
    {
        // 计算下一步所处的瓷砖的坐标
        int next_x = x + dx[i];
        int next_y = y + dy[i];

        // 如果瓷砖坐标不合法，则不走
        if (next_x < 0 || next_x >= h || next_y < 0 || next_y >= w)
            continue;
        // 如果不是安全的砖，则不走
        if (g[next_x][next_y] != '.')
            continue;
        // 如果瓷砖已经被走过，则不走
        if (st[next_x][next_y])
            continue;

        // 到这里就代表可以走到这一块瓷砖
        st[next_x][next_y] = true;
        ++res;
        DFS(next_x, next_y);
    }
}

int main()
{
    scanf("%d %d", &w, &h);
    for (int i = 0; i < h; ++i)
    {
        scanf("%s", g[i]);
    }

    // 找到第一块砖
    for (int i = 0; i < h; ++i)
    {
        for (int j = 0; j < w; ++j)
        {
            if (g[i][j] == '@')
            {
                ++res; // 加上第一块瓷砖
                DFS(i, j);
            }
        }
    }
    printf("%d\n", res);

    return 0;
}